# -*- coding:utf-8 -*-
from flask import current_app, jsonify
from flask import g
from flask import request
from flask import session

from ihome import constants
from ihome import db
from ihome.models import User
from ihome.utils.common import login_required
from ihome.utils.image_storage import storage_image
from ihome.utils.response_code import RET
from . import  api


# 定义一个视图，接收查询实名认证的请求
@api.route("/auth",methods= ["GET"])
@login_required
def see_user_auth():
    print("查询省份信息")
    # 获取用户id
    user_id = g.user_id
    # 去数据库中查询用户id,查询用户对象
    print(user_id)
    if not user_id:
        return jsonify(errno=RET.USERERR,errmsg="用户未登录")
    try:
        user = User.query.get(user_id)
    # 查询出来信息
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno = RET.DBERR,errmsg="用户查询错误")
    if not user:
        return  jsonify(errno =RET.USERERR,errmsg="用户不存在，或者未注册")

    # f返回数据
    return jsonify(errno =RET.OK,errmsg="ok",data = user.to_user_auth())


# 定义一个蓝图接收身份认证
@api.route('/user/auth', methods=["POST"])
@login_required
def set_user_auth():
    print("认证身份证")
    #  取到当前登录用户id
    user_id = g.user_id
    #  取到传过来的认证的信息
    data_dict = request.json
    real_name = data_dict.get("real_name")
    id_card = data_dict.get("id_card")

    #  通过id查找到当前用户
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询数据失败")

    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")

    #  更新用户的认证信息
    user.real_name = real_name
    user.id_card = id_card

    # 保存到数据库
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存数据失败")

    return jsonify(errno=RET.OK, errmsg="OK")

# 定义一个蓝图，修改用户名
@api.route("/user/name",methods = ["POST"])
@login_required
def setup_name():

    # # 获取name
    user_name = request.json.get("name")

    if not user_name:
        return  jsonify(errno = RET.PARAMERR,errmsg = "参数不完整")
    user_id = g.user_id

    # user_id = session.get("user_id")
    if not user_id:
        return jsonify(errno = RET.SESSIONERR,errmsg="用户未登陆")

    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取用户信息失败")

    if not user:
        return jsonify(errno=RET.USERERR, errmsg="用户不存在")

    # 更新数据
    user.name = user_name
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
    # 获取用户id
    # 从数据库中找到相对应的模型
    # 将数据存到数据库
    # 返回结果
        # 将 session 中保存的数据进行实时更新
    session["name"] = user_id

    return jsonify(errno=RET.OK, errmsg="OK")



@api.route("/user/avatar",methods =["POST"])
@login_required
def set_image():
    print(1)
    # 判断用户是否登陆
    # user_id = session.get("user_id")
    #
    # # 如果未登陆直接返回
    # if not user_id:
    #     return  jsonify(errno =RET.SERVERERR,errmsg = "用户未登录")
    user_id = g.user_id
    if not request.files.get("avatar"):
        return  jsonify(errno = RET.NODATA,errmsg = "没有数据上传")
    # 接收用户上传的图片，读取出来
    try:
        image_date = request.files.get("avatar").read()
    except Exception as e:

        current_app.logger.debug(e)
        return jsonify(errno=RET.DATAERR, errmsg="读取失败")

    # 调用七牛云上传图片，返回key
    try:
        url = storage_image(image_date)
        print (url)
    except Exception as e:

        current_app.logger.debug(e)
        return jsonify(errno=RET.THIRDERR, errmsg="第三方平台出错")

    # 查询用户是否存在
    try:
        user = User.query.get(user_id)

    except Exception as e:

        current_app.loger.debug(e)
        return  jsonify(errno = RET.USERERR,errmsg="获取用户信息错误")
    # 用户不存在
    if not user:
        return jsonify(errno= RET.REQERR,errmsg ="用户不存在")

    # 添加属性
    user.avatar_url = url

    # 保存数据
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存用户数据错误")
    avatar_url = constants.QINIU_DOMIN_PREFIX + url
    #  返回上传的结果<avatar_url>
    return jsonify(errno=RET.OK, errmsg="OK", data={"avatar_url": avatar_url})



# 定义一个蓝图
@api.route("/user",methods =["GET"])
@login_required
def get_user_info():
    #
    # # 判断用户是否登陆
    # user_id = session.get("user_id")
    # print (user_id)
    user_id = g.user_id
    #　根据用户id去查询数据
    if not user_id:
        return jsonify(errno = RET.USERERR,errmsg="用户未登录")
    try:
        user = User.query.get(user_id)

    except Exception as e:
        current_app.logger.debug(e)

        return jsonify(errno = RET.DBERR,errmsg = "查询数据失败")

    if not user:

        return  jsonify(errno = RET.NODATA,errmsg = "用户不存在")

    # 组织好数据，返回给前端

    return  jsonify(errno=RET.OK,errmsg="OK",data = user.to_dict())
